home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 March / PCWorld_2007-03_cd.bin / domacnost a kancelar / scribus / scribus-1.3.3.7-win32-install.exe / tcl / tix8.1 / VResize.tcl < prev    next >
Text File  |  2001-11-03  |  5KB  |  211 lines

  1. # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
  2. #
  3. #    $Id: VResize.tcl,v 1.1.1.1.2.1 2001/11/03 07:26:10 idiscovery Exp $
  4. #
  5. # VResize.tcl --
  6. #
  7. #    tixVResize:
  8. #    Virtual base class for all classes that provide resize capability,
  9. #    such as the resize handle and the MDI client window.
  10. #
  11. # Copyright (c) 1993-1999 Ioi Kim Lam.
  12. # Copyright (c) 2000-2001 Tix Project Group.
  13. #
  14. # See the file "license.terms" for information on usage and redistribution
  15. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  16. #
  17.  
  18. tixWidgetClass tixVResize {
  19.     -virtual true
  20.     -classname TixVResize
  21.     -superclass tixPrimitive
  22.     -method {
  23.     drag dragend dragstart
  24.     }
  25.     -flag {
  26.     -gridded -gridx -gridy -minwidth -minheight
  27.     }
  28.     -configspec {
  29.      {-gridded gridded Gridded false}
  30.     {-gridx gridX Grid 10}
  31.     {-gridy gridY Grid 10}
  32.     {-minwidth minWidth MinWidth 0}
  33.     {-minheight minHeight MinHeight 0}
  34.    }
  35. }
  36.  
  37.  
  38. proc tixVResize:InitWidgetRec {w} {
  39.     upvar #0 $w data
  40.  
  41.     tixChainMethod $w InitWidgetRec
  42.  
  43.     set data(movePending) 0
  44.     set data(aborted) 0
  45.     set data(depress) 0
  46. }
  47.  
  48. #----------------------------------------------------------------------
  49. #                    Public methods
  50. #----------------------------------------------------------------------
  51. # Start dragging a window
  52. #
  53. proc tixVResize:dragstart {w win depress rootx rooty wrect mrect} {
  54.     upvar #0 $w data
  55.  
  56.     set data(rootx) $rootx
  57.     set data(rooty) $rooty
  58.  
  59.     set data(mx) [lindex $mrect 0]
  60.     set data(my) [lindex $mrect 1]
  61.     set data(mw) [lindex $mrect 2]
  62.     set data(mh) [lindex $mrect 3]
  63.  
  64.     set data(fx) [lindex $wrect 0]
  65.     set data(fy) [lindex $wrect 1]
  66.     set data(fw) [lindex $wrect 2]
  67.     set data(fh) [lindex $wrect 3]
  68.  
  69.     set data(old_x) [lindex $wrect 0]
  70.     set data(old_y) [lindex $wrect 1]
  71.     set data(old_w) [lindex $wrect 2]
  72.     set data(old_h) [lindex $wrect 3]
  73.  
  74.     if {$data(mw) < 0} {
  75.     set data(maxx)  [expr "$data(fx) + $data(old_w) - $data(-minwidth)"]
  76.     } else {
  77.     set data(maxx) 32000
  78.     }
  79.     if {$data(mh) < 0} {
  80.     set data(maxy)  [expr "$data(fy) + $data(old_h) - $data(-minheight)"]
  81.     } else {
  82.     set data(maxy) 32000
  83.     }
  84.  
  85.     set data(aborted) 0
  86.  
  87.     tixCallMethod $w ShowHintFrame
  88.     tixCallMethod $w SetHintFrame $data(fx) $data(fy) $data(fw) $data(fh)
  89.  
  90.     # Grab so that all button events are captured
  91.     #
  92.     grab $win
  93.     focus $win
  94.  
  95.     set data(depress) $depress
  96.     if {$depress} {
  97.     set data(oldRelief) [$win cget -relief]
  98.     $win config -relief sunken
  99.     }
  100. }
  101.  
  102.  
  103. proc tixVResize:drag {w rootx rooty} {
  104.     upvar #0 $w data
  105.  
  106.     if {$data(aborted) == 0} {
  107.     set data(newrootx) $rootx
  108.     set data(newrooty) $rooty
  109.  
  110.     if {$data(movePending) == 0} {
  111.         set data(movePending) 1
  112.         after 2 tixVResize:DragCompressed $w
  113.     }
  114.     }
  115. }
  116.  
  117. proc tixVResize:dragend {w win isAbort rootx rooty} {
  118.     upvar #0 $w data
  119.  
  120.     if {$data(aborted)} {
  121.     if {$isAbort == 0} {
  122.         grab release $win
  123.     }
  124.     return
  125.     }
  126.  
  127.     # Just in case some draggings are not applied.
  128.     #
  129.     update
  130.  
  131.     tixCallMethod $w HideHintFrame
  132.  
  133.     if {$isAbort} {
  134.     set data(aborted) 1
  135.     } else {
  136.     # Apply the changes
  137.     #
  138.     tixCallMethod $w UpdateSize $data(fx) $data(fy) $data(fw) $data(fh)
  139.  
  140.     # Release the grab
  141.     #
  142.     grab release $win
  143.     }
  144.  
  145.     if {$data(depress)} {
  146.     $win config -relief $data(oldRelief)
  147.     }
  148. }
  149.  
  150. #----------------------------------------------------------------------
  151. #                    Internal methods
  152. #----------------------------------------------------------------------
  153.  
  154. proc tixVResize:DragCompressed {w} {
  155.     if {![winfo exists $w]} {
  156.     return
  157.     }
  158.  
  159.     upvar #0 $w data
  160.  
  161.     if {$data(aborted) == 1 || $data(movePending) == 0} {
  162.     return
  163.     }
  164.  
  165.     set dx [expr "$data(newrootx) - $data(rootx)"]
  166.     set dy [expr "$data(newrooty) - $data(rooty)"]
  167.  
  168.     set data(fx) [expr "$data(old_x) + ($dx * $data(mx))"]
  169.     set data(fy) [expr "$data(old_y) + ($dy * $data(my))"]
  170.     set data(fw) [expr "$data(old_w) + ($dx * $data(mw))"]
  171.     set data(fh) [expr "$data(old_h) + ($dy * $data(mh))"]
  172.  
  173.     if {$data(fw) < $data(-minwidth)} {
  174.     set data(fw) $data(-minwidth)
  175.     }
  176.     if {$data(fh) < $data(-minheight)} {
  177.     set data(fh) $data(-minheight)
  178.     }
  179.  
  180.     if {$data(fx) > $data(maxx)} {
  181.     set data(fx) $data(maxx)
  182.     }
  183.     if {$data(fy) > $data(maxy)} {
  184.     set data(fy) $data(maxy)
  185.     }
  186.  
  187.     # If we need grid, set x,y,w,h to fit the grid
  188.     #
  189.     # *note* grid overrides minwidth and maxwidth ...
  190.     #
  191.     if {$data(-gridded)} {
  192.     set data(fx) [expr "round($data(fx).0/$data(-gridx)) * $data(-gridx)"]
  193.     set data(fy) [expr "round($data(fy).0/$data(-gridy)) * $data(-gridy)"]
  194.  
  195.     set fx2  [expr $data(fx) + $data(fw) - 2]
  196.     set fy2  [expr $data(fy) + $data(fh) - 2]
  197.  
  198.     set fx2 [expr "round($fx2.0/$data(-gridx)) * $data(-gridx)"]
  199.     set fy2 [expr "round($fy2.0/$data(-gridy)) * $data(-gridy)"]
  200.  
  201.     set data(fw) [expr $fx2 - $data(fx) + 1]
  202.     set data(fh) [expr $fy2 - $data(fy) + 1]
  203.     }
  204.  
  205.     tixCallMethod $w SetHintFrame $data(fx) $data(fy) $data(fw) $data(fh)
  206.  
  207.     update idletasks
  208.  
  209.     set data(movePending) 0
  210. }
  211.